package com.guit.hrms.utils;

public class JudgeUtil {
    private static final double EARTH_RADIUS_KM = 6371.0; // 地球半径，单位为公里

    /**
     * 判断当前位置是否在设置的打卡范围内
     * @param lat 当前位置的纬度
     * @param lon 当前位置的经度
     * @param guitLat 设置打卡点的经度
     * @param guitLon 设置打卡点的纬度
     * @param radius 设置允许距离打卡点打卡的最大距离（直线距离）
     * @return boolean 返回1，代表在允许打卡的范围;返回2, 代表不在允许打卡的范围
     */
    public static boolean isWithinRadius(double lat, double lon, double guitLat, double guitLon, double radius) {
        // 纬度和经度每度的距离（单位：公里）
        double latDistancePerDegree = 111.32;
        double lonDistancePerDegree = 111.32 * Math.cos(Math.toRadians(lat));

        // 计算纬度和经度差值对应的距离（单位：公里）
        double dLat = (guitLat - lat) * latDistancePerDegree;
        double dLon = (guitLon - lon) * lonDistancePerDegree;

        // 计算平面距离（单位：米）
        double distance = Math.sqrt(dLat * dLat + dLon * dLon) * 1000;

        // 返回距离是否在允许范围内
        return distance <= radius;
    }
}
